﻿#define _CRT_SECURE_NO_WARNINGS
#include "Contact.h"
#include "SeqList.h"

void load(contact* con)
{
	const char * name="text.txt";
	FILE* ptr=fopen(name, "r");
	if (ptr == NULL)
	{
		perror("failsure");
		return;
	}
	per tem1;
	while (fscanf(ptr, "%s %s %d %s %s\n", tem1.name, tem1.gender, &tem1.age, tem1.tem, tem1.address) != EOF)
	{
		SLPushBack(con, tem1);
	}
	fclose(ptr);
}
//初始化通讯录
void InitContact(contact* con)
{
	//这里直接调用就可以
	SLInit(con);
	//实现一个加载到文件的操作
	load(con);
}
//销毁通讯录数据
void DestroyContact(contact* con)
{
	SLDestroy(con);
}
//添加通讯录数据
void AddContact(contact* con)
{
	//添加通讯录我们需要手动手术到我们定义的
	//per结构体中
	per tem;
	printf("请输入联系人的姓名：\n");
	scanf("%s", tem.name);
	printf("请输入联系人的性别：\n");
	scanf("%s", tem.gender);
	printf("请输入联系人的年龄：\n");
	scanf("%d", &tem.age);
	printf("请输入联系人的号码：\n");
	scanf("%s", tem.tem);
	printf("请输入联系人的地址：\n");
	scanf("%s", tem.address);
	//接着我们要把这个联系人的信息插入到通讯录中
	//这里我们选择用尾部插入
	FILE* ptr = fopen("text.txt", "a");
	if (ptr == NULL)
	{
		perror("failsure");
		return;
	}
	fprintf(ptr, "%s %s %d %s %s\n", tem.name, tem.gender, tem.age, tem.tem, tem.address);
	fclose(ptr);
	SLPushBack(con, tem);
	printf("添加联系人成功\n");
}
//展⽰通讯录数据
void ShowContact(contact* con)
{
	//先打印表头
	printf("%10s %10s %10s %10s %14s\n", "姓名", "性别", "年龄", "号码", "地址");
	for (int i = 0; i < con->size; i++)
	{
		printf("%11s %8s %10d %14s %13s\n",
			con->arr[i].name,
			con->arr[i].gender,
			con->arr[i].age,
			con->arr[i].tem,
			con->arr[i].address);
	}
}
int ByName(contact* con, char name[name_max])
{
	assert(con);
	for (int i = 0; i < con->size; i++)
	{
		if (strcmp(con->arr[i].name, name) == 0)
		{
			return i;
		}
	}
	return -1;
}
//删除通讯录数据
void DelContact(contact* con)
{
	char tem[name_max];
	//删除之前要检查要删除的数据是否存在
	printf("请输入你要删除联系人的姓名：\n");
	scanf("%s", tem);
	int ret = ByName(con, tem);
	if (ret < 0)
	{
		printf("删除失败！！！没有找到要删除的联系人\n");
	}
	else
	{
		SLErase(con, ret);
		printf("删除成功！！！\n");
	}
}
//查找通讯录数据
void FindContact(contact* con)
{
	char name[name_max];
	printf("请输出你要查找联系人的姓名：\n");
	scanf("%s", name);
	int ret = ByName(con, name);
	if (ret < 0)
	{
		printf("查找失败！！！没有该数据\n");
	}
	else
	{
		printf("查找成功!!!该联系人的信息如下：\n");
		printf("%10s %10s %10s %10s %14s\n", "姓名", "性别", "年龄", "号码", "地址");
		printf("%11s %8s %10d %14s %13s\n",
			con->arr[ret].name,
			con->arr[ret].gender,
			con->arr[ret].age,
			con->arr[ret].tem,
			con->arr[ret].address);
	}
}
//修改通讯录数据
void ModifyContact(contact* con)
{
	assert(con);
	char name[name_max];
	//修改之前要有该数据
	printf("请输出你要修改联系人的姓名:\n");
	scanf("%s", name);
	int ret = ByName(con, name);
	if (ret < 0)
	{
		printf("修改失败！！！没有该数据\n");
	}
	else
	{
		printf("请输入修改后联系人的姓名：\n");
		scanf("%s", con->arr[ret].name);
		printf("请输入修改后联系人的性别：\n");
		scanf("%s", con->arr[ret].gender);
		printf("请输入修改后联系人的年龄：\n");
		scanf("%d", &con->arr[ret].age);
		printf("请输入修改后联系人的号码：\n");
		scanf("%s", con->arr[ret].tem);
		printf("请输入修改后联系人的地址：\n");
		scanf("%s", con->arr[ret].address);
		printf("修改成功！！！\n");
	}
}
//把通讯录写入文件
void SaveContact(contact* con)
{
	FILE* pr = fopen("通讯录.txt", "a");
	if (pr == NULL)
	{
		perror("fopen error");
		return;
	}
	for (int i = 0; i < con->size; i++)
	{
		char tem1[name_max];
		sprintf(tem1, "%s ", con->arr[i].name);
		fputs(tem1, pr);

		char tem2[name_max];
		sprintf(tem2, "%s ", con->arr[i].gender);
		fputs(tem2, pr);

		char tem3[name_max];
		sprintf(tem3, "%d ", con->arr[i].age);
		fputs(tem3, pr);

		char tem4[name_max];
		sprintf(tem4, "%s ", con->arr[i].tem);
		fputs(tem4, pr);

		char tem5[name_max];
		sprintf(tem5, "%s\n", con->arr[i].address);
		fputs(tem5, pr);

	}
	fclose(pr);
	pr = NULL;

}